#include <SorteoConfiguration.h>

SorteoConfiguration::SorteoConfiguration() : GameConfiguration()
{
	// inicalizar todas la variables de clase
}

SorteoConfiguration::~SorteoConfiguration()
{
}

void SorteoConfiguration::deserialize( QByteArray data )
{
	BMMemoryUtils memUtil;
	unsigned int bytesCopied = 0;
	char * buff = data.data();
	
	// Transaccion (0xd1)
	memUtil.MemoryCopy( &m_IdTransacSort , buff , sizeof( m_IdTransacSort ) );
	bytesCopied += sizeof( m_IdTransacSort );

	// dia
	memUtil.MemoryCopy( &m_DiaSort , buff + bytesCopied , sizeof( m_DiaSort ) ); 
	bytesCopied += sizeof( m_DiaSort );
	
	// mes
	memUtil.MemoryCopy( &m_MesSort , buff + bytesCopied , sizeof( m_MesSort ) ); 
	bytesCopied += sizeof( m_MesSort );

	// anio
	memUtil.MemoryCopy( &m_AnioSort , buff + bytesCopied , sizeof( m_AnioSort ) ); 
	bytesCopied += sizeof( m_AnioSort );

	// dia cierre
	memUtil.MemoryCopy( &m_DiaCierreSort , buff + bytesCopied , sizeof( m_DiaCierreSort ) ); 
	bytesCopied += sizeof( m_DiaCierreSort );
	
	// mes cierre
	memUtil.MemoryCopy( &m_MesCierreSort , buff + bytesCopied , sizeof( m_MesCierreSort ) ); 
	bytesCopied += sizeof( m_MesCierreSort );

	// anio cierre
	memUtil.MemoryCopy( &m_AnioCierreSort , buff + bytesCopied , sizeof( m_AnioCierreSort ) ); 
	bytesCopied += sizeof( m_AnioCierreSort );

	// hora cierre
	memUtil.MemoryCopy( &m_HoraCierreSort , buff + bytesCopied , sizeof( m_HoraCierreSort ) ); 
	bytesCopied += sizeof( m_HoraCierreSort );

	// minutos cierre
	memUtil.MemoryCopy( &m_MinCierreSort , buff + bytesCopied, sizeof( m_MinCierreSort ) ); 
	bytesCopied += sizeof( m_MinCierreSort );

	// segundos cierre
	memUtil.MemoryCopy( &m_SegCierreSort , buff + bytesCopied, sizeof( m_SegCierreSort ) ); 
	bytesCopied += sizeof( m_SegCierreSort );

	// Numero de sorteo
	memUtil.MemoryCopy( &m_NroSorteo , buff + bytesCopied , sizeof( m_NroSorteo ) );
	bytesCopied += sizeof( m_NroSorteo );

	// descripcion
	char descripcion[ SIZE_DESCRIPCION + 1];
	memset( descripcion , '\0' , SIZE_DESCRIPCION + 1);

	memUtil.MemoryCopy( descripcion , buff + bytesCopied , SIZE_DESCRIPCION , BIG_ENDIAN );
	bytesCopied += SIZE_DESCRIPCION;
	m_DescripSort = descripcion;

	// cantidad de cifras
	memUtil.MemoryCopy( &m_CantCifras , buff + bytesCopied , sizeof( m_CantCifras ) );
	bytesCopied += sizeof( m_CantCifras );

	// bitmap rango 1
	memUtil.MemoryCopy( m_RangoUno , buff + bytesCopied , SIZE_BITMAP_RANGO , BIG_ENDIAN );
	bytesCopied += SIZE_BITMAP_RANGO;

	// bitmap rango 2
	memUtil.MemoryCopy( m_RangoDos , buff + bytesCopied , SIZE_BITMAP_RANGO , BIG_ENDIAN );
	bytesCopied += SIZE_BITMAP_RANGO;

	// bit map de entes
	memUtil.MemoryCopy( &m_BitMapEntes , buff + bytesCopied , sizeof( m_BitMapEntes ) );
	bytesCopied += sizeof( m_BitMapEntes );

	// cantidad de lineas adicionales
	memUtil.MemoryCopy( &m_CantLineasAdd , buff + bytesCopied , sizeof( m_CantLineasAdd ) );
	bytesCopied += sizeof( m_CantLineasAdd );

	// Agrego las lineas adicionas necesarias
	for ( short int i = 0 ; i < m_CantLineasAdd ; i++ )
	{
		char fixedBuffLineaAdd[ FIXED_SIZE_LINEA_ADD + 1 ];
		memset( fixedBuffLineaAdd , '\0' , FIXED_SIZE_LINEA_ADD + 1);

		memUtil.MemoryCopy( fixedBuffLineaAdd , buff + bytesCopied , FIXED_SIZE_LINEA_ADD , BIG_ENDIAN );
		bytesCopied += FIXED_SIZE_LINEA_ADD;

		// copio la linea adicional a un QString
		QString lineaAdd = "";
		for (short int j = 0 ; j < FIXED_SIZE_LINEA_ADD ; j++ )
			lineaAdd.append( fixedBuffLineaAdd[j] );

		m_ListaLineasAdd.push_back( lineaAdd );
	}
}

void SorteoConfiguration::save()
{

}

void SorteoConfiguration::update( QByteArray data )
{
	// this->deserialize()
	// this->save()
}